<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>4.人员案例_深度监视</title>
		<!-- 引入Vue -->
		<script type="text/javascript" src="../js/vue.js"></script>
	</head>
	<body>
		<!-- 
				深度监视：
						(1).watch默认不监测对象内部值的改变（监视一层）。
						(2).配置deep:true可以监测对象内部值改变（监视多层）。
				备注：
						(1).Vue自身可以监测对象内部值的改变（无论多深都可以），但Vue给程序员提供的watch默认不可以！
						(2).使用watch时根据数据的具体结构，以及需求，决定是否采用深度监视。
		 -->
		<!-- 准备好一个容器-->
		<div id="demo">
			<ul>
				<li>姓名：{{name}}</li>
				<li>性别：{{gender}}</li>
				<li>年龄：对外:{{age.foreignAge}}，真实:{{age.realAge}}</li>
			</ul>
			<button @click="age.foreignAge += 1">对外年龄+1</button>
			<button @click="age = {foreignAge:100,realAge:200}">替换掉age对象</button>
		</div>
	</body>

	<script type="text/javascript">
		//阻止 vue 在启动时生成生产提示。
		Vue.config.productionTip = false
		
		new Vue({
			el:'#demo',
			data:{
				name:'小猪佩奇',
				gender:'男',
				age:{
					foreignAge:18,
					realAge:42,
				}
			},
			watch:{
				//监视某个对象中某个属性的变化
				/* 'age.foreignAge':{
					handler(){
						console.log('foreignAge被改变了')
					}
				}, */

				//监视某个对象的改变（地址值），不监测对象中属性的改变
				/* age:{
					handler(){
						console.log('age被改了')
					}
				} */

				//监视某个对象的改变（地址值），且也可以监视到对象中属性的改变
				age:{
					deep:true, //开启深度监视
					handler(){
						console.log('age被改了 或 age中的某个属性改了')
					}
				}

			}
		})
	</script>
</html>